//
// Description: 840. 模拟散列表
// Created by Loading on 2022/5/14.
//

#include <bits/stdc++.h>

using namespace std;

// 开放寻址法
constexpr int N = 2 * 1e5 + 3;      // 开放寻址法一般开 数据范围的 2~3倍, 大概率没有冲突，且需要是一个质数
constexpr int null = 0x3f3f3f3f;    // 空值 null 为 0x3f3f3f3f

int h[N];

// find 方法，如果x存在，则返回x的位置，如果x不存在，则返回x应储存在的位置，此位置当前为null
int find(int x) {
    int k = (x % N + N) % N;
    while (h[k] != null && h[k] != x) {
        ++k;
        if (k == N) {
            k = 0;
        }
    }
    return k;
}

int main() {
    memset(h, 0x3f, sizeof h);

    int n;
    cin >> n;
    while (n--) {
        char p;
        int x;
        cin >> p >> x;
        int k = find(x);
        if (p == 'I') {
            h[k] = x;
        } else {
            if (h[k] != null) {
                cout << "Yes" << endl;
            } else {
                cout << "No" << endl;
            }
        }
    }

    return 0;
}

// 拉链法
//constexpr int N = 1e5 + 3;
//
//int h[N], e[N], ne[N], idx;
//
//void insert(int x) {
//    // 哈希，插入对应位置
//    int k = (x % N + N) % N;
//    e[idx] = x;
//    ne[idx] = h[k];
//    h[k] = idx++;
//}
//
//bool find(int x) {
//    // 哈希，寻找拉链位置
//    int k = (x % N + N) % N;
//    for (int i = h[k]; i != -1; i = ne[i]) {
//        if (e[i] == x) {
//            return true;
//        }
//    }
//
//    return false;
//}
//
//int main() {
//    memset(h, -1, sizeof h);
//
//    int n;
//    cin >> n;
//    while (n--) {
//        char p;
//        int x;
//        cin >> p >> x;
//        if (p == 'I') {
//            insert(x);
//        } else {
//            if (find(x)) {
//                cout << "Yes" << endl;
//            } else {
//                cout << "No" << endl;
//            }
//        }
//    }
//
//    return 0;
//}